package cfsmon.logic.dfm;

import java.util.Map;
import java.util.Set;

import cfsmon.common.Event;
import cfsmon.common.Parameter;
import cfsmon.logic.dfm.DfmState;

public interface IDfm {

	/**
	 * Returns the maximum number of monitors (default is 1)
	 */
	public int getMaximumNumberOfMonitors();
	
	public void setMaximumNumberOfMonitors(int max);
	
	/**
	 * Returns a map of state names to states of the DFM
	 */
	public Map<String, DfmState> getStates();
	
	public void addState(DfmState state);
	
	/**
	 * Returns the set of final states
	 */
	public Set<DfmState> getFinalStates();
	
	public void addFinalState(DfmState state);
	
	/**
	 * Returns the initial state
	 */
	public DfmState getInitialState();
	
	public void setInitialState(DfmState state);
	
	/**
	 * Returns a map of event names to events of the DFM
	 */
	public Map<String, Event> getEvents();
	
	public void addEvent(Event event);
	
	/**
	 * Returns a map of parameter names to parameters of the DFM. This
	 * set is considered to form the DFM state.
	 */
	public Map<String, Parameter> getParameters();
	
	public void addParameter(Parameter parameter);
	
	public void print();
	
}
